﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Dominio;

namespace Interfaz
{
    public partial class VentArticulos : Form
    {

        #region atributos

        private List<Articulo> lArticulos;
        private List<IVA> lIVAs;
        private int ultimoIdArticulo;
        private bool ingreso;
        private Articulo actualArticulo;

        #endregion

        #region constructor

        public VentArticulos()
        {
            InitializeComponent();
            ultimoIdArticulo = Sistema.getUltimoIdArticulo();            
            lIVAs = Sistema.getIVAs();
            comboBoxIVA.DataSource = lIVAs.ToArray();
            IVA unIVA = new IVA();
            unIVA.OID = -1;
            lIVAs.Add(unIVA);
            comboBoxBuscarIVA.DataSource = lIVAs.ToArray();
            comboBoxBuscarIVA.SelectedIndex = -1;
            lArticulos = new List<Articulo>();
            limpiarCampos();
        }

        #endregion

        #region eventos
        
        private void buttonBuscar_Click(object sender, EventArgs e)
        {            
            int idDesde = int.Parse(textBoxBuscarIdDesde.Text);
            int idHasta = int.Parse(textBoxBuscarIdHasta.Text);
            int stockDesde = int.Parse(textBoxBuscarStockDesde.Text);
            int stockHasta = int.Parse(textBoxBuscarStockHasta.Text);
            int idIva = -1;
            if (comboBoxBuscarIVA.SelectedIndex != -1)
            {                
                IVA iva = (IVA)comboBoxBuscarIVA.SelectedItem;
                idIva = iva.OID;
            }
            lArticulos = Sistema.buscarArticulos(idDesde, idHasta, textBoxBuscarCodigo.Text
                , textBoxBuscarNombre.Text, stockDesde, stockHasta, idIva);
            listaArticulos.DataSource = lArticulos.ToArray();
        }

        private void buttonAceptar_Click(object sender, EventArgs e)
        {
            if (validarDatos())
            {   
                IVA unIVA = (IVA)comboBoxIVA.SelectedItem;
                actualArticulo.Nombre = TextoNombre.Text;
                actualArticulo.Codigo = TextoCodigo.Text;
                actualArticulo.Descripcion = TextoDescripcion.Text;
                //programar imagen                
                actualArticulo.IVA = unIVA;
                actualArticulo.FechaIngreso = dateTimePickerFechaIngreso.Value;
                actualArticulo.Stock = 0;
                if (ingreso)
                {
                    ultimoIdArticulo += 1;
                    actualArticulo.OID = ultimoIdArticulo;
                    actualArticulo.Imagen = actualArticulo.OID + ".jpg";
                    //Sistema.agregarArticulo(TextoCodigo.Text, TextoDescripcion.Text, dateTimePickerFechaIngreso.Value,
                    //    actualArticulo.Imagen, unIVA, TextoNombre.Text);
                    lArticulos.Add(actualArticulo);
                    limpiarCampos();
                }
                else
                {
                    //Sistema.modificarArticulo(TextoCodigo.Text, TextoDescripcion.Text, dateTimePickerFechaIngreso.Value,
                    //    actualArticulo.Imagen, unIVA, TextoNombre.Text, actualArticulo.Stock, true, actualArticulo);
                    limpiarCampos();
                }
            }
        }

        private void buttonCancelar_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        private void buttonNuevo_Click(object sender, EventArgs e)
        {
            limpiarCampos();
        }

        private void buttonEliminar_Click(object sender, EventArgs e)
        {
            if (listaArticulos.SelectedIndex != -1)
            {
                Sistema.eliminarArticulo(actualArticulo);
                lArticulos.Remove(actualArticulo);
                limpiarCampos();
            }
        }

        private void listaArticulos_MouseClick(object sender, MouseEventArgs e)
        {
            if (listaArticulos.SelectedIndex != -1)
            {
                ingreso = false;
                actualArticulo = (Articulo)listaArticulos.SelectedItem;
                LabelID.Text = actualArticulo.OID.ToString();
                TextoNombre.Text = actualArticulo.Nombre;
                TextoCodigo.Text = actualArticulo.Codigo;
                TextoDescripcion.Text = actualArticulo.Descripcion;
                dateTimePickerFechaIngreso.Value = actualArticulo.FechaIngreso;
                labelStock.Text = actualArticulo.Stock.ToString();
                buscarPosicionDeIVA();
            }
        }

        private void ButtonCambImagen_Click(object sender, EventArgs e)
        {

        }

        private void textBoxBuscarIdDesde_TextChanged(object sender, EventArgs e)
        {
            try
            {
                int nro = int.Parse(textBoxBuscarIdDesde.Text);
            }
            catch
            {
                textBoxBuscarIdDesde.Text = "0";
            }
        }

        private void textBoxBuscarIdHasta_TextChanged(object sender, EventArgs e)
        {
            try
            {
                int nro = int.Parse(textBoxBuscarIdHasta.Text);
            }
            catch
            {
                textBoxBuscarIdHasta.Text = "1000000";
            }
        }

        private void textBoxBuscarStockDesde_TextChanged(object sender, EventArgs e)
        {
            try
            {
                int nro = int.Parse(textBoxBuscarStockDesde.Text);
            }
            catch
            {
                textBoxBuscarStockDesde.Text = "0";
            }
        }

        private void textBoxBuscarStockHasta_TextChanged(object sender, EventArgs e)
        {
            try
            {
                int nro = int.Parse(textBoxBuscarStockHasta.Text);
            }
            catch
            {
                textBoxBuscarStockHasta.Text = "1000000";
            }
        }

        #endregion

        #region metodos

        private bool validarDatos()
        {
            bool ok = true;
            if (TextoNombre.Text.Equals("") && ok)
            {
                MessageBox.Show("Error. Nombre vacío");
                ok = false;
            }
            if (TextoCodigo.Text.Equals("") && ok)
            {
                MessageBox.Show("Error. Código vacío");
                ok = false;
            }
            if (comboBoxIVA.SelectedIndex == -1 && ok)
            {
                MessageBox.Show("Error. Debe seleccionar el IVA del artículo");
                ok = false;
            }
            if (ok)
            {
                try
                {
                    DateTime date = dateTimePickerFechaIngreso.Value;
                }
                catch (Exception)
                {
                    MessageBox.Show("Error en la fecha de ingreso");
                    ok = false;
                }
            }
            return ok;
        }

        private void limpiarCampos()
        {
            ingreso = true;
            TextoNombre.Text = "";
            TextoCodigo.Text = "";
            TextoDescripcion.Text = "";
            comboBoxIVA.SelectedIndex = -1;            
            LabelID.Text = "";
            labelStock.Text = "0";
            listaArticulos.DataSource = lArticulos.ToArray();
            dateTimePickerFechaIngreso.Value = DateTime.Now;
            actualArticulo = new Articulo();
        }

        private void buscarPosicionDeIVA()
        {
            for (int i = 0; i < comboBoxIVA.Items.Count; i++)
            {
                IVA IVAAux = (IVA)comboBoxIVA.Items[i];
                if (actualArticulo.IVA.OID == IVAAux.OID)
                {
                    comboBoxIVA.SelectedIndex = i;
                }
            }
        }

        #endregion        
    }
}
